﻿$(function () {
    // 1.封装数据渲染功能
    // 定义当前页
    let pages = 1
    // 每页条数数据
    let pageSize = 3

    function arrly() {
        $.ajax({
            // 请求类型
            type: "get",
            // 请求地址
            url: "/product/queryProductDetailList",
            // 请求数据
            data: {
                page: pages,
                pageSize: pageSize
            },
            // 返回的数据  'text', 'xml', 'json', 'script'
            dataType: "json",
            success: function (res) {
                // console.log(res)
                //alert("成功时调用")

                // ajax中使用 ==》 使用模板引擎
                let str = template('tmp', res)
                $('tbody').html(str)
                // 生成页面数
                paging(res.total)
            }
        })
    }

    arrly()


    // 2.分页功能 ==》 使用bs的插件
    function paging(userSun) {
        $("#paginator").bootstrapPaginator({
            // 默认是2，如果是bootstrap3版本，这个参数必填
            bootstrapMajorVersion: 3,
            // 当前页
            currentPage: pages,
            // 总页数 ==》 页数 = 总数据数 / 一页放多少条数据  然后再进行上去取整
            totalPages: Math.ceil(userSun / pageSize),
            // 设置控件的大小，mini, small, normal,large
            size: "normal",
            onPageClicked: function (event, originalEvent, type, page) {
                // 为按钮绑定点击事件 page:当前点击的按钮值
                pages = page
                arrly()
            }
        })
    }


    // 3.下拉菜单的渲染
    $.ajax({
        // 请求类型
        type: "get",
        // 请求地址
        url: '/category/querySecondCategoryPaging',
        // 请求数据
        data: {
            page: 1,
            pageSize: 500
        },
        // 返回的数据  'text', 'xml', 'json', 'script'
        dataType: "json",
        success: function (res) {
            console.log(res)
            //alert("成功时调用")
            // 使用模板
            let str = template('tmp1', res)
            // 赋值
            $('.dropdown-menu').html(str)
        }
    })


    // 4.模拟下拉菜单选中
    // 1- 给a标签绑定点击事件 ，当a标签被点击时：
    // 2- 获取a标签的文本，赋值给按钮的文本
    // 3- 获取a标签对应id， 赋值给隐藏域
    $('.dropdown-menu').on('click', 'a', function () {
        $('.cate-btn').text($(this).text())
        $('#brandId').val($(this).data('id'))

        // 下拉菜单手动改变样式
        $('.form-add').data('bootstrapValidator').updateStatus('brandId', 'VALID')
    })


    // 5.图片上传
    // 要求：
    // 上传3 张图片， 只保留最近上传的三张图片
    // 图片预览
    // 定义一个数组进行图片的存放
    let picArr = []
    $("#file").fileupload({
        dataType: "json",
        //e：事件对象
        //data：图片上传后的对象，通过data.result.picAddr可以获取上传后的图片地址
        done: function (e, data) {
            // 获取到图片的路径地址
            let pic = data.result

            // 将图片地址存在数组中
            picArr.unshift(pic)

            // 页面中显示图片
            $('.img-box').prepend('<img src="' + pic.picAddr + '" alt="" height="50">')

            // 保留最近上传的三张图片
            if (picArr.length > 3) {
                // 删除数组中最后一个
                picArr.pop()
                $('.img-box img:last-child').remove()
            }

            if (picArr.length == 3) {
                // 如果图片数据合理， 就把图片地址 赋值给隐藏域
                $('#picArr').val(JSON.stringify(picArr))
                // 恢复图片校验状态
                $('.form-add').data('bootstrapValidator').updateStatus('picArr', 'VALID')
            }
            console.log('picArr:', picArr)
        }
    })


    // 6.表单校验
    //使用表单校验插件
    $('.form-add').bootstrapValidator({
        //1. 指定不校验的类型，默认为[':disabled', ':hidden', ':not(:visible)'],可以不设置
        excluded: [':disabled'],

        //2. 指定校验时的图标显示，默认是bootstrap风格
        feedbackIcons: {
            valid: 'glyphicon glyphicon-ok',
            invalid: 'glyphicon glyphicon-remove',
            validating: 'glyphicon glyphicon-refresh'
        },

        //3. 指定校验字段
        fields: {
            // 二级分类
            brandId: {
                validators: {
                    //不能为空
                    notEmpty: {
                        message: '请选择二级菜单'
                    }
                }
            }, proName: {
                validators: {
                    //不能为空
                    notEmpty: {
                        message: '商品名称不能为空'
                    }
                }
            }, proDesc: {
                validators: {
                    //不能为空
                    notEmpty: {
                        message: '商品描述不能为空'
                    }
                }
            }, num: {
                validators: {
                    //不能为空
                    notEmpty: {
                        message: '商品库存不能为空'
                    },
                    //正则校验
                    regexp: {
                        regexp: /^[1-9]\d*$/,
                        message: '商品库存开头不能为0'
                    }
                }
            }, size: {
                validators: {
                    //不能为空
                    notEmpty: {
                        message: '商品尺码不能为空'
                    },
                    //正则校验
                    regexp: {
                        // '尺码必须是：xx-xx, x数字'
                        regexp: /^[1-9]\d*-[1-9]*\d$/,
                        message: '尺码必须是：xx-xx, x数字'
                    }
                }
            }, oldPrice: {
                validators: {
                    //不能为空
                    notEmpty: {
                        message: '商品原价不能为空'
                    },
                    //正则校验
                    regexp: {
                        regexp: /^[1-9]\d*$/,
                        message: '商品原价开头不能为0'
                    }
                }
            }, price: {
                validators: {
                    // 不能为空
                    notEmpty: {
                        message: '商品现价不能为空'
                    },
                    //正则校验
                    regexp: {
                        regexp: /^[1-9]\d*$/,
                        message: '商品原价开头不能为0'
                    }
                }
            }, picArr: {
                validators: {
                    //不能为空
                    notEmpty: {
                        message: '请上传3张图片'
                    }
                }
            }
        }
    })

    // 7.手动恢复 图片 和下拉列表校验状态  90跟123行


    // 8.添加商品到服务器
    $('.form-add').on('success.form.bv', function (e) {
        // 阻止提交按钮的默认行为
        e.preventDefault()

        // 表单获取到所有的键跟值的拼接
        let str = $('.form-add').serialize()
        console.log(str)

        $.ajax({
            // 请求类型
            type: "post",
            // 请求地址
            url: "/product/addProduct",
            // 请求数据
            data: $('.form-add').serialize(),
            // 返回的数据  'text', 'xml', 'json', 'script'
            dataType: "json",
            success: function (res) {
                console.log(res)
                // 重新渲染
                arrly()
                // 模态框隐藏
                $('.modal-add').modal('hide')
                // 表单重置
                $('.form-add').data('bootstrapValidator').resetForm(true)

                // 手动恢复图片 和按钮的样式
                $('.cate-btn').text('请选择二级分类')
                $('.img-box').empty()
                // 清空数组
                picArr = []
            }
        })

    })


})